home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / programr / appsrcs.zip / APPEXIT.ZIP / APPEXIT.C next >
C/C++ Source or Header  |  1993-05-02  |  5KB  |  158 lines

  1. /*-------------------------------------------------------------------------
  2.  AppExit.c
  3.  
  4.  A Exit Windows utility for AppBar.
  5.  
  6.  by
  7.  GMP van kempen
  8.  NEVERnever Software 1993
  9.  
  10. 4.00.1 Initial release
  11. 4.00.2 added "now" commandline option to exit Windows immediately.
  12.        made "OK" button default push button.
  13.  
  14. ---------------------------------------------------------------------------*/
  15. //compile with the strictest error checking
  16. #define STRICT
  17. #include <windows.h>
  18. #include <windowsx.h>
  19. #include <ctl3d.h>
  20. #include <stdio.h>
  21. #include <string.h>
  22. #include "appexit.h"
  23.  
  24. #define MAKECHILD(a,b,c,d,e,f,g,h) CreateWindow(a,b,WS_CHILD | WS_VISIBLE | c,d,e,f,g,hWnd,h,hInst,(LPSTR) NULL)
  25. #define MAKEBUTTON(a,b,c,d,e,f)    MAKECHILD("button",a,BS_PUSHBUTTON,b,c,d,e,f)
  26. #define MAKEDEFBUTTON(a,b,c,d,e,f) MAKECHILD("button",a,BS_DEFPUSHBUTTON,b,c,d,e,f)
  27. #define MAKETEXT(a,b,c,d,e)       MAKECHILD("static",a,SS_CENTER,b,c,d,e,(HMENU) -1)
  28. #define MAKESTATIC(a,b,c,d)       MAKECHILD("static",NULL,SS_BLACKRECT,a,b,c,d,(HMENU) -1)
  29. #define MAKEBORDER(a,b,c,d)       MAKECHILD("static",NULL,SS_WHITERECT,a,b,c,d,(HMENU) -1)
  30.  
  31. char        szAppName[] = "AppExit";
  32. HINSTANCE   hInst;
  33.  
  34.  
  35. int PASCAL WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
  36.            LPSTR lpszCmdLine, int nCmdShow)
  37.     {
  38.     HWND    hWnd;
  39.     MSG     msg;
  40.     WNDCLASS    wndclass;
  41.     int     xScreen, yScreen, yCaption, xSize, ySize;
  42.  
  43.     if(_fstrstr(lpszCmdLine, "now"))
  44.     {
  45.     ExitWindows(NULL, NULL);
  46.     return msg.wParam;
  47.     }
  48.  
  49.     if(!hPrevInstance)
  50.     {
  51.     wndclass.style            = CS_HREDRAW | CS_VREDRAW;
  52.     wndclass.lpfnWndProc        = WndProc;
  53.     wndclass.cbClsExtra        = 0;
  54.     wndclass.cbWndExtra        = 0;
  55.     wndclass.hInstance        = hInstance;
  56.     wndclass.hIcon            = LoadIcon(hInstance, szAppName);
  57.     wndclass.hCursor        = LoadCursor(NULL, IDC_ARROW);
  58.     wndclass.hbrBackground        = GetStockBrush(LTGRAY_BRUSH);
  59.     wndclass.lpszMenuName        = NULL;
  60.     wndclass.lpszClassName        = szAppName;
  61.  
  62.     RegisterClass(&wndclass);
  63.     }
  64.  
  65.     hInst = hInstance;
  66.  
  67.     xScreen = GetSystemMetrics(SM_CXSCREEN);
  68.     yScreen = GetSystemMetrics(SM_CYSCREEN);
  69.     yCaption = GetSystemMetrics(SM_CYCAPTION);
  70.  
  71.     Ctl3dRegister(hInstance);
  72.     Ctl3dAutoSubclass(hInstance);
  73.  
  74.     xSize = 260;
  75.     ySize = 93 + yCaption;
  76.  
  77.     hWnd = CreateWindow(szAppName, "AppExit 4.0",
  78.             WS_POPUP | WS_SYSMENU | WS_CAPTION |
  79.             WS_MINIMIZEBOX | WS_VISIBLE,
  80.             (xScreen - xSize)/2, yScreen/2 - ySize,
  81.             xSize, ySize,
  82.             NULL, (HMENU) NULL, hInstance, NULL);
  83.  
  84.     ShowWindow(hWnd, SW_SHOWNORMAL);
  85.     UpdateWindow(hWnd);
  86.  
  87.     while(GetMessage(&msg, NULL, 0, 0))
  88.     {
  89.     TranslateMessage(&msg);
  90.     DispatchMessage(&msg);
  91.     }
  92.  
  93.     Ctl3dUnregister(hInstance);
  94.  
  95.     return msg.wParam;
  96.     } /* end WinMain */
  97.  
  98. /*------------------------------------------------------------------------/
  99.    FUNCTION: WndProc()
  100. /------------------------------------------------------------------------*/
  101. long WINAPI WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  102.     {
  103.     char *Button[3] = {"&No","&Yes","&Restart"};
  104.     HBRUSH hbrush;
  105.     HWND hWndButton[3];
  106.  
  107.     switch (message)
  108.     {
  109.     case WM_CREATE:
  110.         // create static frame around text fields
  111.         Ctl3dSubclassCtl(MAKEBORDER(0, 0, 258, 92));
  112.         Ctl3dSubclassCtl(MAKESTATIC(9, 9, 242, 42));
  113.         hWndButton[0] = MAKEBUTTON(Button[0], 10, 60, 80, 24, IDC_BUTTONS);
  114.         hWndButton[1] = MAKEDEFBUTTON(Button[1], 10+80, 60, 80, 24, IDC_BUTTONS+1);
  115.         hWndButton[2] = MAKEBUTTON(Button[2], 10+160, 60, 80, 24, IDC_BUTTONS+2);
  116.         Ctl3dSubclassCtl(MAKETEXT("Leave Windows?", 20, 16, 220, 20));
  117.         return 0;
  118.  
  119.     case WM_SYSCOLORCHANGE:
  120.            Ctl3dColorChange();
  121.        break;
  122.  
  123.     case WM_CTLCOLOR:
  124.         hbrush = Ctl3dCtlColorEx(message, wParam, lParam);
  125.         if(hbrush != (HBRUSH) FALSE)
  126.         return hbrush;
  127.         else
  128.         return DefWindowProc(hWnd, message, wParam, lParam);
  129.  
  130.        case WM_KEYDOWN:
  131.         if(wParam == VK_RETURN)
  132.         SendMessage(hWnd, WM_COMMAND, IDC_BUTTONS+1, 0);
  133.         return 0;
  134.  
  135.        case WM_COMMAND:
  136.         switch(wParam)
  137.         {
  138.         case IDC_BUTTONS: /* No */
  139.             SendMessage(hWnd, WM_DESTROY, 0, 0);
  140.             break;
  141.  
  142.         case IDC_BUTTONS+1:  /* Yes */
  143.             ExitWindows(NULL, NULL);
  144.             break;
  145.  
  146.         case IDC_BUTTONS+2: /* Restart */
  147.             ExitWindows(EW_RESTARTWINDOWS, NULL);
  148.             break;
  149.         }
  150.         break;
  151.  
  152.        case WM_DESTROY:    // kill the whole program
  153.         PostQuitMessage(0);
  154.         return 0;
  155.     }
  156.     return DefWindowProc(hWnd, message, wParam, lParam);
  157.     } /* end WndProc */
  158.